60806040523480156200001157600080fd5b506040518060400160405280600c81526020017f436865636b7320546f6b656e00000000000000000000000000000000000000008152506040518060400160405280600681526020017f434845434b53000000000000000000000000000000000000000000000000000081525081600390816200008f9190620005d3565b508060049081620000a19190620005d3565b505050620000c4620000b86200010b60201b60201c565b6200011360201b60201c565b6200010533620000d9620001d960201b60201c565b600a620000e791906200084a565b6461f313f880620000f991906200089b565b620001e260201b60201c565b620009d2565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000254576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200024b9062000947565b60405180910390fd5b62000268600083836200034f60201b60201c565b80600260008282546200027c919062000969565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200032f9190620009b5565b60405180910390a36200034b600083836200035460201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620003db57607f821691505b602082108103620003f157620003f062000393565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200045b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200041c565b6200046786836200041c565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004b4620004ae620004a8846200047f565b62000489565b6200047f565b9050919050565b6000819050919050565b620004d08362000493565b620004e8620004df82620004bb565b84845462000429565b825550505050565b600090565b620004ff620004f0565b6200050c818484620004c5565b505050565b5b81811015620005345762000528600082620004f5565b60018101905062000512565b5050565b601f82111562000583576200054d81620003f7565b62000558846200040c565b8101602085101562000568578190505b6200058062000577856200040c565b83018262000511565b50505b505050565b600082821c905092915050565b6000620005a86000198460080262000588565b1980831691505092915050565b6000620005c3838362000595565b9150826002028217905092915050565b620005de8262000359565b67ffffffffffffffff811115620005fa57620005f962000364565b5b620006068254620003c2565b6200061382828562000538565b600060209050601f8311600181146200064b576000841562000636578287015190505b620006428582620005b5565b865550620006b2565b601f1984166200065b86620003f7565b60005b8281101562000685578489015182556001820191506020850194506020810190506200065e565b86831015620006a55784890151620006a1601f89168262000595565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620007485780860481111562000720576200071f620006ba565b5b6001851615620007305780820291505b80810290506200074085620006e9565b945062000700565b94509492505050565b60008262000763576001905062000836565b8162000773576000905062000836565b81600181146200078c57600281146200079757620007cd565b600191505062000836565b60ff841115620007ac57620007ab620006ba565b5b8360020a915084821115620007c657620007c5620006ba565b5b5062000836565b5060208310610133831016604e8410600b8410161715620008075782820a905083811115620008015762000800620006ba565b5b62000836565b620008168484846001620006f6565b9250905081840481111562000830576200082f620006ba565b5b81810290505b9392505050565b600060ff82169050919050565b600062000857826200047f565b915062000864836200083d565b9250620008937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000751565b905092915050565b6000620008a8826200047f565b9150620008b5836200047f565b9250828202620008c5816200047f565b91508282048414831517620008df57620008de620006ba565b5b5092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200092f601f83620008e6565b91506200093c82620008f7565b602082019050919050565b60006020820190508181036000830152620009628162000920565b9050919050565b600062000976826200047f565b915062000983836200047f565b92508282019050808211156200099e576200099d620006ba565b5b92915050565b620009af816200047f565b82525050565b6000602082019050620009cc6000830184620009a4565b92915050565b61148b80620009e26000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c806370a082311161008c57806395d89b411161006657806395d89b4114610216578063a457c2d714610234578063a9059cbb14610264578063dd62ed3e14610294576100cf565b806370a08231146101be578063715018a6146101ee5780638da5cb5b146101f8576100cf565b806306fdde03146100d4578063095ea7b3146100f257806318160ddd1461012257806323b872dd14610140578063313ce56714610170578063395093511461018e575b600080fd5b6100dc6102c4565b6040516100e99190610cd2565b60405180910390f35b61010c60048036038101906101079190610d8d565b610356565b6040516101199190610de8565b60405180910390f35b61012a610379565b6040516101379190610e12565b60405180910390f35b61015a60048036038101906101559190610e2d565b610383565b6040516101679190610de8565b60405180910390f35b6101786103b2565b6040516101859190610e9c565b60405180910390f35b6101a860048036038101906101a39190610d8d565b6103bb565b6040516101b59190610de8565b60405180910390f35b6101d860048036038101906101d39190610eb7565b6103f2565b6040516101e59190610e12565b60405180910390f35b6101f661043a565b005b6102006104c2565b60405161020d9190610ef3565b60405180910390f35b61021e6104ec565b60405161022b9190610cd2565b60405180910390f35b61024e60048036038101906102499190610d8d565b61057e565b60405161025b9190610de8565b60405180910390f35b61027e60048036038101906102799190610d8d565b6105f5565b60405161028b9190610de8565b60405180910390f35b6102ae60048036038101906102a99190610f0e565b610618565b6040516102bb9190610e12565b60405180910390f35b6060600380546102d390610f7d565b80601f01602080910402602001604051908101604052809291908181526020018280546102ff90610f7d565b801561034c5780601f106103215761010080835404028352916020019161034c565b820191906000526020600020905b81548152906001019060200180831161032f57829003601f168201915b5050505050905090565b60008061036161069f565b905061036e8185856106a7565b600191505092915050565b6000600254905090565b60008061038e61069f565b905061039b858285610870565b6103a68585856108fc565b60019150509392505050565b60006012905090565b6000806103c661069f565b90506103e78185856103d88589610618565b6103e29190610fdd565b6106a7565b600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61044261069f565b73ffffffffffffffffffffffffffffffffffffffff166104606104c2565b73ffffffffffffffffffffffffffffffffffffffff16146104b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ad9061105d565b60405180910390fd5b6104c06000610b72565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546104fb90610f7d565b80601f016020809104026020016040519081016040528092919081815260200182805461052790610f7d565b80156105745780601f1061054957610100808354040283529160200191610574565b820191906000526020600020905b81548152906001019060200180831161055757829003601f168201915b5050505050905090565b60008061058961069f565b905060006105978286610618565b9050838110156105dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d3906110ef565b60405180910390fd5b6105e982868684036106a7565b60019250505092915050565b60008061060061069f565b905061060d8185856108fc565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610716576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070d90611181565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610785576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077c90611213565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516108639190610e12565b60405180910390a3505050565b600061087c8484610618565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146108f657818110156108e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108df9061127f565b60405180910390fd5b6108f584848484036106a7565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361096b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096290611311565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036109da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d1906113a3565b60405180910390fd5b6109e5838383610c38565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610a6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6290611435565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610b599190610e12565b60405180910390a3610b6c848484610c3d565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610c7c578082015181840152602081019050610c61565b60008484015250505050565b6000601f19601f8301169050919050565b6000610ca482610c42565b610cae8185610c4d565b9350610cbe818560208601610c5e565b610cc781610c88565b840191505092915050565b60006020820190508181036000830152610cec8184610c99565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610d2482610cf9565b9050919050565b610d3481610d19565b8114610d3f57600080fd5b50565b600081359050610d5181610d2b565b92915050565b6000819050919050565b610d6a81610d57565b8114610d7557600080fd5b50565b600081359050610d8781610d61565b92915050565b60008060408385031215610da457610da3610cf4565b5b6000610db285828601610d42565b9250506020610dc385828601610d78565b9150509250929050565b60008115159050919050565b610de281610dcd565b82525050565b6000602082019050610dfd6000830184610dd9565b92915050565b610e0c81610d57565b82525050565b6000602082019050610e276000830184610e03565b92915050565b600080600060608486031215610e4657610e45610cf4565b5b6000610e5486828701610d42565b9350506020610e6586828701610d42565b9250506040610e7686828701610d78565b9150509250925092565b600060ff82169050919050565b610e9681610e80565b82525050565b6000602082019050610eb16000830184610e8d565b92915050565b600060208284031215610ecd57610ecc610cf4565b5b6000610edb84828501610d42565b91505092915050565b610eed81610d19565b82525050565b6000602082019050610f086000830184610ee4565b92915050565b60008060408385031215610f2557610f24610cf4565b5b6000610f3385828601610d42565b9250506020610f4485828601610d42565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610f9557607f821691505b602082108103610fa857610fa7610f4e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610fe882610d57565b9150610ff383610d57565b925082820190508082111561100b5761100a610fae565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611047602083610c4d565b915061105282611011565b602082019050919050565b600060208201905081810360008301526110768161103a565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006110d9602583610c4d565b91506110e48261107d565b604082019050919050565b60006020820190508181036000830152611108816110cc565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061116b602483610c4d565b91506111768261110f565b604082019050919050565b6000602082019050818103600083015261119a8161115e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006111fd602283610c4d565b9150611208826111a1565b604082019050919050565b6000602082019050818103600083015261122c816111f0565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611269601d83610c4d565b915061127482611233565b602082019050919050565b600060208201905081810360008301526112988161125c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006112fb602583610c4d565b91506113068261129f565b604082019050919050565b6000602082019050818103600083015261132a816112ee565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061138d602383610c4d565b915061139882611331565b604082019050919050565b600060208201905081810360008301526113bc81611380565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061141f602683610c4d565b915061142a826113c3565b604082019050919050565b6000602082019050818103600083015261144e81611412565b905091905056fea2646970667358221220a096523a4554ed32d6fc8e4569aa9134507f40966e96b97afe253d4c73efc59064736f6c63430008110033