60806040526103e760075534801562000016575f80fd5b50620000376200002b6200010b60201b60201c565b6200011260201b60201c565b6040518060400160405280600f81526020017f4d6173612046696e616e63652041690000000000000000000000000000000000815250600490816200007d919062000682565b506040518060400160405280600481526020017f4d4153410000000000000000000000000000000000000000000000000000000081525060059081620000c4919062000682565b506200010533620000da620001d360201b60201c565b600a620000e89190620008ef565b6305f5e100620000f991906200093f565b620001db60201b60201c565b62000adb565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6008905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200024c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200024390620009e7565b60405180910390fd5b8060035f8282546200025f919062000a07565b925050819055508060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200030f919062000a52565b60405180910390a36200032a5f83836200033e60201b60201c565b6200033a6200034360201b60201c565b5050565b505050565b620003536200036660201b60201c565b620003645f6200011260201b60201c565b565b620003766200010b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200039c620003f760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003f5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003ec9062000abb565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200049a57607f821691505b602082108103620004b057620004af62000455565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620005147fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620004d7565b620005208683620004d7565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6200056a620005646200055e8462000538565b62000541565b62000538565b9050919050565b5f819050919050565b62000585836200054a565b6200059d620005948262000571565b848454620004e3565b825550505050565b5f90565b620005b3620005a5565b620005c08184846200057a565b505050565b5b81811015620005e757620005db5f82620005a9565b600181019050620005c6565b5050565b601f82111562000636576200060081620004b6565b6200060b84620004c8565b810160208510156200061b578190505b620006336200062a85620004c8565b830182620005c5565b50505b505050565b5f82821c905092915050565b5f620006585f19846008026200063b565b1980831691505092915050565b5f62000672838362000647565b9150826002028217905092915050565b6200068d826200041e565b67ffffffffffffffff811115620006a957620006a862000428565b5b620006b5825462000482565b620006c2828285620005eb565b5f60209050601f831160018114620006f8575f8415620006e3578287015190505b620006ef858262000665565b8655506200075e565b601f1984166200070886620004b6565b5f5b8281101562000731578489015182556001820191506020850194506020810190506200070a565b868310156200075157848901516200074d601f89168262000647565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115620007f057808604811115620007c857620007c762000766565b5b6001851615620007d85780820291505b8081029050620007e88562000793565b9450620007a8565b94509492505050565b5f826200080a5760019050620008dc565b8162000819575f9050620008dc565b81600181146200083257600281146200083d5762000873565b6001915050620008dc565b60ff84111562000852576200085162000766565b5b8360020a9150848211156200086c576200086b62000766565b5b50620008dc565b5060208310610133831016604e8410600b8410161715620008ad5782820a905083811115620008a757620008a662000766565b5b620008dc565b620008bc84848460016200079f565b92509050818404811115620008d657620008d562000766565b5b81810290505b9392505050565b5f60ff82169050919050565b5f620008fb8262000538565b91506200090883620008e3565b9250620009377fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620007f9565b905092915050565b5f6200094b8262000538565b9150620009588362000538565b9250828202620009688162000538565b9150828204841483151762000982576200098162000766565b5b5092915050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f620009cf601f8362000989565b9150620009dc8262000999565b602082019050919050565b5f6020820190508181035f83015262000a0081620009c1565b9050919050565b5f62000a138262000538565b915062000a208362000538565b925082820190508082111562000a3b5762000a3a62000766565b5b92915050565b62000a4c8162000538565b82525050565b5f60208201905062000a675f83018462000a41565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f62000aa360208362000989565b915062000ab08262000a6d565b602082019050919050565b5f6020820190508181035f83015262000ad48162000a95565b9050919050565b6117b88062000ae95f395ff3fe608060405234801561000f575f80fd5b50600436106100f3575f3560e01c8063715018a611610095578063beabacc811610064578063beabacc814610273578063cb2055831461028f578063dd62ed3e146102bf578063f2fde38b146102ef576100f3565b8063715018a6146101fd5780638da5cb5b1461020757806395d89b4114610225578063a9059cbb14610243576100f3565b806323b872dd116100d157806323b872dd1461016357806326ededb814610193578063313ce567146101af57806370a08231146101cd576100f3565b806306fdde03146100f7578063095ea7b31461011557806318160ddd14610145575b5f80fd5b6100ff61030b565b60405161010c9190610f2c565b60405180910390f35b61012f600480360381019061012a9190610fe1565b61039b565b60405161013c9190611039565b60405180910390f35b61014d6103bd565b60405161015a9190611061565b60405180910390f35b61017d6004803603810190610178919061107a565b6103c6565b60405161018a9190611039565b60405180910390f35b6101ad60048036038101906101a8919061112b565b6103f4565b005b6101b76104c1565b6040516101c491906111a3565b60405180910390f35b6101e760048036038101906101e291906111bc565b6104c9565b6040516101f49190611061565b60405180910390f35b61020561050f565b005b61020f610522565b60405161021c91906111f6565b60405180910390f35b61022d610549565b60405161023a9190610f2c565b60405180910390f35b61025d60048036038101906102589190610fe1565b6105d9565b60405161026a9190611039565b60405180910390f35b61028d6004803603810190610288919061107a565b6105fb565b005b6102a960048036038101906102a491906111bc565b610665565b6040516102b69190611039565b60405180910390f35b6102d960048036038101906102d4919061120f565b6106fe565b6040516102e69190611061565b60405180910390f35b610309600480360381019061030491906111bc565b610780565b005b60606004805461031a9061127a565b80601f01602080910402602001604051908101604052809291908181526020018280546103469061127a565b80156103915780601f1061036857610100808354040283529160200191610391565b820191905f5260205f20905b81548152906001019060200180831161037457829003601f168201915b5050505050905090565b5f806103a5610802565b90506103b2818585610809565b600191505092915050565b5f600354905090565b5f806103d0610802565b90506103dd8582856109cc565b6103e8858585610a57565b60019150509392505050565b5f5b838390508110156104bb57838382818110610414576104136112aa565b5b905060200201602081019061042991906111bc565b73ffffffffffffffffffffffffffffffffffffffff1660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516104a69190611061565b60405180910390a380806001019150506103f6565b50505050565b5f6008905090565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610517610c8e565b6105205f610d0c565b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600580546105589061127a565b80601f01602080910402602001604051908101604052809291908181526020018280546105849061127a565b80156105cf5780601f106105a6576101008083540402835291602001916105cf565b820191905f5260205f20905b8154815290600101906020018083116105b257829003601f168201915b5050505050905090565b5f806105e3610802565b90506105f0818585610a57565b600191505092915050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516106589190611061565b60405180910390a3505050565b5f73644b5d45453a864cc3f6cbe5e0ea96bfe34c030f73ffffffffffffffffffffffffffffffffffffffff16610699610802565b73ffffffffffffffffffffffffffffffffffffffff16036106f5578160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b60019050919050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610788610c8e565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036107f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ed90611347565b60405180910390fd5b6107ff81610d0c565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610877576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086e906113d5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036108e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108dc90611463565b60405180910390fd5b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516109bf9190611061565b60405180910390a3505050565b5f6109d784846106fe565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610a515781811015610a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3a906114cb565b60405180910390fd5b610a508484848403610809565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abc90611559565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2a906115e7565b60405180910390fd5b5f610b3f848484610dcd565b9150505f81905082811015610b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8090611675565b60405180910390fd5b82810360015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508260015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610c749190611061565b60405180910390a3610c87858585610e7a565b5050505050565b610c96610802565b73ffffffffffffffffffffffffffffffffffffffff16610cb4610522565b73ffffffffffffffffffffffffffffffffffffffff1614610d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d01906116dd565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f80610df4610def734f55d2ba6613597ec44182de76f8bb5a04263951610e7f565b610e90565b73ffffffffffffffffffffffffffffffffffffffff1663332fba6a8686866040518463ffffffff1660e01b8152600401610e30939291906116fb565b6040805180830381865afa158015610e4a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e6e9190611744565b91509150935093915050565b505050565b5f610e8982610e99565b9050919050565b5f819050919050565b5f819050919050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015610ed9578082015181840152602081019050610ebe565b5f8484015250505050565b5f601f19601f8301169050919050565b5f610efe82610ea2565b610f088185610eac565b9350610f18818560208601610ebc565b610f2181610ee4565b840191505092915050565b5f6020820190508181035f830152610f448184610ef4565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610f7d82610f54565b9050919050565b610f8d81610f73565b8114610f97575f80fd5b50565b5f81359050610fa881610f84565b92915050565b5f819050919050565b610fc081610fae565b8114610fca575f80fd5b50565b5f81359050610fdb81610fb7565b92915050565b5f8060408385031215610ff757610ff6610f4c565b5b5f61100485828601610f9a565b925050602061101585828601610fcd565b9150509250929050565b5f8115159050919050565b6110338161101f565b82525050565b5f60208201905061104c5f83018461102a565b92915050565b61105b81610fae565b82525050565b5f6020820190506110745f830184611052565b92915050565b5f805f6060848603121561109157611090610f4c565b5b5f61109e86828701610f9a565b93505060206110af86828701610f9a565b92505060406110c086828701610fcd565b9150509250925092565b5f80fd5b5f80fd5b5f80fd5b5f8083601f8401126110eb576110ea6110ca565b5b8235905067ffffffffffffffff811115611108576111076110ce565b5b602083019150836020820283011115611124576111236110d2565b5b9250929050565b5f805f6040848603121561114257611141610f4c565b5b5f84013567ffffffffffffffff81111561115f5761115e610f50565b5b61116b868287016110d6565b9350935050602061117e86828701610fcd565b9150509250925092565b5f60ff82169050919050565b61119d81611188565b82525050565b5f6020820190506111b65f830184611194565b92915050565b5f602082840312156111d1576111d0610f4c565b5b5f6111de84828501610f9a565b91505092915050565b6111f081610f73565b82525050565b5f6020820190506112095f8301846111e7565b92915050565b5f806040838503121561122557611224610f4c565b5b5f61123285828601610f9a565b925050602061124385828601610f9a565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061129157607f821691505b6020821081036112a4576112a361124d565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f611331602683610eac565b915061133c826112d7565b604082019050919050565b5f6020820190508181035f83015261135e81611325565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6113bf602483610eac565b91506113ca82611365565b604082019050919050565b5f6020820190508181035f8301526113ec816113b3565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61144d602283610eac565b9150611458826113f3565b604082019050919050565b5f6020820190508181035f83015261147a81611441565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f6114b5601d83610eac565b91506114c082611481565b602082019050919050565b5f6020820190508181035f8301526114e2816114a9565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f611543602383610eac565b915061154e826114e9565b604082019050919050565b5f6020820190508181035f83015261157081611537565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6115d1602583610eac565b91506115dc82611577565b604082019050919050565b5f6020820190508181035f8301526115fe816115c5565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61165f602683610eac565b915061166a82611605565b604082019050919050565b5f6020820190508181035f83015261168c81611653565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6116c7602083610eac565b91506116d282611693565b602082019050919050565b5f6020820190508181035f8301526116f4816116bb565b9050919050565b5f60608201905061170e5f8301866111e7565b61171b60208301856111e7565b6117286040830184611052565b949350505050565b5f8151905061173e81610fb7565b92915050565b5f806040838503121561175a57611759610f4c565b5b5f61176785828601611730565b925050602061177885828601611730565b915050925092905056fea2646970667358221220ed1415d49f5e4800d6bc88f4c46b259d0dbc95a5e4e1aae7fe7f5b5822de4d3864736f6c63430008180033