60806040526040518060400160405280600581526020017f416b6f646f0000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f414b4f00000000000000000000000000000000000000000000000000000000008152508160039081620000819190620005ca565b508060049081620000939190620005ca565b505050620000b23369d3c21bcecceda1000000620000b860201b60201c565b620007da565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200012b575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401620001229190620006f1565b60405180910390fd5b6200013e5f83836200014260201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000196578060025f82825462000189919062000739565b9250508190555062000267565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101562000222578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401620002199392919062000784565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620002b0578060025f8282540392505081905550620002fa565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620003599190620007bf565b60405180910390a3505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620003e257607f821691505b602082108103620003f857620003f76200039d565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026200045c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200041f565b6200046886836200041f565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620004b2620004ac620004a68462000480565b62000489565b62000480565b9050919050565b5f819050919050565b620004cd8362000492565b620004e5620004dc82620004b9565b8484546200042b565b825550505050565b5f90565b620004fb620004ed565b62000508818484620004c2565b505050565b5b818110156200052f57620005235f82620004f1565b6001810190506200050e565b5050565b601f8211156200057e576200054881620003fe565b620005538462000410565b8101602085101562000563578190505b6200057b620005728562000410565b8301826200050d565b50505b505050565b5f82821c905092915050565b5f620005a05f198460080262000583565b1980831691505092915050565b5f620005ba83836200058f565b9150826002028217905092915050565b620005d58262000366565b67ffffffffffffffff811115620005f157620005f062000370565b5b620005fd8254620003ca565b6200060a82828562000533565b5f60209050601f83116001811462000640575f84156200062b578287015190505b620006378582620005ad565b865550620006a6565b601f1984166200065086620003fe565b5f5b82811015620006795784890151825560018201915060208501945060208101905062000652565b8683101562000699578489015162000695601f8916826200058f565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620006d982620006ae565b9050919050565b620006eb81620006cd565b82525050565b5f602082019050620007065f830184620006e0565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f620007458262000480565b9150620007528362000480565b92508282019050808211156200076d576200076c6200070c565b5b92915050565b6200077e8162000480565b82525050565b5f606082019050620007995f830186620006e0565b620007a8602083018562000773565b620007b7604083018462000773565b949350505050565b5f602082019050620007d45f83018462000773565b92915050565b61134e80620007e85f395ff3fe608060405234801561000f575f80fd5b50600436106100cd575f3560e01c80634ada218b1161008a57806395d89b411161006457806395d89b4114610239578063a9059cbb14610257578063dd62ed3e14610287578063e9587e86146102b7576100cd565b80634ada218b146101bb57806367243482146101d957806370a0823114610209576100cd565b806306fdde03146100d1578063095ea7b3146100ef57806309d580221461011f57806318160ddd1461014f57806323b872dd1461016d578063313ce5671461019d575b5f80fd5b6100d96102e7565b6040516100e69190610caf565b60405180910390f35b61010960048036038101906101049190610d6d565b610377565b6040516101169190610dc5565b60405180910390f35b61013960048036038101906101349190610dde565b610399565b6040516101469190610dc5565b60405180910390f35b6101576103eb565b6040516101649190610e18565b60405180910390f35b61018760048036038101906101829190610e31565b6103f4565b6040516101949190610dc5565b60405180910390f35b6101a5610422565b6040516101b29190610e9c565b60405180910390f35b6101c361042a565b6040516101d09190610dc5565b60405180910390f35b6101f360048036038101906101ee91906110b5565b61043c565b6040516102009190610dc5565b60405180910390f35b610223600480360381019061021e9190610dde565b6104e3565b6040516102309190610e18565b60405180910390f35b610241610528565b60405161024e9190610caf565b60405180910390f35b610271600480360381019061026c9190610d6d565b6105b8565b60405161027e9190610dc5565b60405180910390f35b6102a1600480360381019061029c919061112b565b6105da565b6040516102ae9190610e18565b60405180910390f35b6102d160048036038101906102cc9190610dde565b61065c565b6040516102de9190610e18565b60405180910390f35b6060600380546102f690611196565b80601f016020809104026020016040519081016040528092919081815260200182805461032290611196565b801561036d5780601f106103445761010080835404028352916020019161036d565b820191905f5260205f20905b81548152906001019060200180831161035057829003601f168201915b5050505050905090565b5f806103816106a2565b905061038e8185856106a9565b600191505092915050565b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f600254905090565b5f806103fe6106a2565b905061040b8582856106bb565b61041685858561074d565b60019150509392505050565b5f6012905090565b60075f9054906101000a900460ff1681565b5f8151835114610481576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161047890611210565b60405180910390fd5b5f5b83518110156104d8576104cb338583815181106104a3576104a261122e565b5b60200260200101518584815181106104be576104bd61122e565b5b602002602001015161074d565b8080600101915050610483565b506001905092915050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60606004805461053790611196565b80601f016020809104026020016040519081016040528092919081815260200182805461056390611196565b80156105ae5780601f10610585576101008083540402835291602001916105ae565b820191905f5260205f20905b81548152906001019060200180831161059157829003601f168201915b5050505050905090565b5f806105c26106a2565b90506105cf81858561074d565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f33905090565b6106b6838383600161083d565b505050565b5f6106c684846105da565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146107475781811015610738578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161072f9392919061126a565b60405180910390fd5b61074684848484035f61083d565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036107bd575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016107b4919061129f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361082d575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610824919061129f565b60405180910390fd5b610838838383610a0c565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036108ad575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016108a4919061129f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361091d575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610914919061129f565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610a06578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516109fd9190610e18565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a5c578060025f828254610a5091906112e5565b92505081905550610b2a565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610ae5578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610adc9392919061126a565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b71578060025f8282540392505081905550610bbb565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c189190610e18565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015610c5c578082015181840152602081019050610c41565b5f8484015250505050565b5f601f19601f8301169050919050565b5f610c8182610c25565b610c8b8185610c2f565b9350610c9b818560208601610c3f565b610ca481610c67565b840191505092915050565b5f6020820190508181035f830152610cc78184610c77565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610d0982610ce0565b9050919050565b610d1981610cff565b8114610d23575f80fd5b50565b5f81359050610d3481610d10565b92915050565b5f819050919050565b610d4c81610d3a565b8114610d56575f80fd5b50565b5f81359050610d6781610d43565b92915050565b5f8060408385031215610d8357610d82610cd8565b5b5f610d9085828601610d26565b9250506020610da185828601610d59565b9150509250929050565b5f8115159050919050565b610dbf81610dab565b82525050565b5f602082019050610dd85f830184610db6565b92915050565b5f60208284031215610df357610df2610cd8565b5b5f610e0084828501610d26565b91505092915050565b610e1281610d3a565b82525050565b5f602082019050610e2b5f830184610e09565b92915050565b5f805f60608486031215610e4857610e47610cd8565b5b5f610e5586828701610d26565b9350506020610e6686828701610d26565b9250506040610e7786828701610d59565b9150509250925092565b5f60ff82169050919050565b610e9681610e81565b82525050565b5f602082019050610eaf5f830184610e8d565b92915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610eef82610c67565b810181811067ffffffffffffffff82111715610f0e57610f0d610eb9565b5b80604052505050565b5f610f20610ccf565b9050610f2c8282610ee6565b919050565b5f67ffffffffffffffff821115610f4b57610f4a610eb9565b5b602082029050602081019050919050565b5f80fd5b5f610f72610f6d84610f31565b610f17565b90508083825260208201905060208402830185811115610f9557610f94610f5c565b5b835b81811015610fbe5780610faa8882610d26565b845260208401935050602081019050610f97565b5050509392505050565b5f82601f830112610fdc57610fdb610eb5565b5b8135610fec848260208601610f60565b91505092915050565b5f67ffffffffffffffff82111561100f5761100e610eb9565b5b602082029050602081019050919050565b5f61103261102d84610ff5565b610f17565b9050808382526020820190506020840283018581111561105557611054610f5c565b5b835b8181101561107e578061106a8882610d59565b845260208401935050602081019050611057565b5050509392505050565b5f82601f83011261109c5761109b610eb5565b5b81356110ac848260208601611020565b91505092915050565b5f80604083850312156110cb576110ca610cd8565b5b5f83013567ffffffffffffffff8111156110e8576110e7610cdc565b5b6110f485828601610fc8565b925050602083013567ffffffffffffffff81111561111557611114610cdc565b5b61112185828601611088565b9150509250929050565b5f806040838503121561114157611140610cd8565b5b5f61114e85828601610d26565b925050602061115f85828601610d26565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806111ad57607f821691505b6020821081036111c0576111bf611169565b5b50919050565b7f417272617973206c656e677468206d69736d61746368000000000000000000005f82015250565b5f6111fa601683610c2f565b9150611205826111c6565b602082019050919050565b5f6020820190508181035f830152611227816111ee565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b61126481610cff565b82525050565b5f60608201905061127d5f83018661125b565b61128a6020830185610e09565b6112976040830184610e09565b949350505050565b5f6020820190506112b25f83018461125b565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6112ef82610d3a565b91506112fa83610d3a565b9250828201905080821115611312576113116112b8565b5b9291505056fea2646970667358221220389edb5939ffa6f81533716285dcbc0f9542d29d35330a1183b621fb9ae0c4bb64736f6c63430008180033