60806040526000600a60146101000a81548160ff02191690831515021790555060405180602001604052806000815250600b90805190602001906200004692919062000fcc565b503480156200005457600080fd5b506040518060400160405280600a81526020017f4a34384241464f524d53000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4a41424241000000000000000000000000000000000000000000000000000000815250620000f27f01ffc9a7000000000000000000000000000000000000000000000000000000006200076f60201b60201c565b81600690805190602001906200010a92919062000fcc565b5080600790805190602001906200012392919062000fcc565b50620001557f80ac58cd000000000000000000000000000000000000000000000000000000006200076f60201b60201c565b620001867f5b5e139f000000000000000000000000000000000000000000000000000000006200076f60201b60201c565b620001b77f780e9d63000000000000000000000000000000000000000000000000000000006200076f60201b60201c565b50506000620001cb6200084760201b60201c565b905080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620002b06040518060400160405280601a81526020017f68747470733a2f2f6a34386261666f726d732e696f2f6170692f0000000000008152506200084f60201b60201c565b620002d77379004c1a3ace472d75358ceceb1d7e47ef98bf106000620008f260201b60201c565b620002fe7379004c1a3ace472d75358ceceb1d7e47ef98bf106001620008f260201b60201c565b620003257379004c1a3ace472d75358ceceb1d7e47ef98bf106002620008f260201b60201c565b6200034c7379004c1a3ace472d75358ceceb1d7e47ef98bf106003620008f260201b60201c565b620003737379004c1a3ace472d75358ceceb1d7e47ef98bf106004620008f260201b60201c565b6200039a7379004c1a3ace472d75358ceceb1d7e47ef98bf106005620008f260201b60201c565b620003c17379004c1a3ace472d75358ceceb1d7e47ef98bf106006620008f260201b60201c565b620003e87379004c1a3ace472d75358ceceb1d7e47ef98bf106007620008f260201b60201c565b6200040f7379004c1a3ace472d75358ceceb1d7e47ef98bf106008620008f260201b60201c565b620004367379004c1a3ace472d75358ceceb1d7e47ef98bf106009620008f260201b60201c565b6200045d7379004c1a3ace472d75358ceceb1d7e47ef98bf10600a620008f260201b60201c565b620004847379004c1a3ace472d75358ceceb1d7e47ef98bf10600b620008f260201b60201c565b620004ab7379004c1a3ace472d75358ceceb1d7e47ef98bf10600c620008f260201b60201c565b620004d27379004c1a3ace472d75358ceceb1d7e47ef98bf10600d620008f260201b60201c565b620004f97379004c1a3ace472d75358ceceb1d7e47ef98bf10600e620008f260201b60201c565b620005207379004c1a3ace472d75358ceceb1d7e47ef98bf10600f620008f260201b60201c565b620005477379004c1a3ace472d75358ceceb1d7e47ef98bf106010620008f260201b60201c565b6200056e7379004c1a3ace472d75358ceceb1d7e47ef98bf106011620008f260201b60201c565b620005957379004c1a3ace472d75358ceceb1d7e47ef98bf106012620008f260201b60201c565b620005bc7379004c1a3ace472d75358ceceb1d7e47ef98bf106013620008f260201b60201c565b620005e373aa9f066554e18d3a6b660786aafea8e9a86305556014620008f260201b60201c565b6200060a73aa9f066554e18d3a6b660786aafea8e9a86305556015620008f260201b60201c565b6200063173aa9f066554e18d3a6b660786aafea8e9a86305556016620008f260201b60201c565b6200065873aa9f066554e18d3a6b660786aafea8e9a86305556017620008f260201b60201c565b6200067f73aa9f066554e18d3a6b660786aafea8e9a86305556018620008f260201b60201c565b620006a6738af39f909679793d2fa5a78e2766e6ef131ecde26019620008f260201b60201c565b620006cd738af39f909679793d2fa5a78e2766e6ef131ecde2601a620008f260201b60201c565b620006f4738af39f909679793d2fa5a78e2766e6ef131ecde2601b620008f260201b60201c565b6200071b73c5e08104c19dafd00fe40737490da9552db5bfe5601c620008f260201b60201c565b620007427384f5de49bf77dec3d6b6d69dc05fa80207262d5a601d620008f260201b60201c565b620007697384f5de49bf77dec3d6b6d69dc05fa80207262d5a601e620008f260201b60201c565b62001557565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161415620007db576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007d29062001308565b60405180910390fd5b6001600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600033905090565b6200085f6200084760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008856200091860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008de576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008d5906200136e565b60405180910390fd5b620008ef816200094260201b60201c565b50565b620009148282604051806020016040528060008152506200095e60201b60201c565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b80600990805190602001906200095a92919062000fcc565b5050565b620009708383620009cc60201b60201c565b62000985600084848462000b7e60201b60201c565b620009c7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009be90620012e6565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a3f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a36906200134c565b60405180910390fd5b62000a508162000d3860201b60201c565b1562000a93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a8a906200132a565b60405180910390fd5b62000aa76000838362000d5c60201b60201c565b62000aff81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002062000d6160201b62001db81790919060201c565b5062000b1d8183600262000d8360201b62001dd2179092919060201c565b50808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600062000bac8473ffffffffffffffffffffffffffffffffffffffff1662000dc060201b62001e071760201c565b1562000d2b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0262000bde6200084760201b60201c565b8786866040518563ffffffff1660e01b815260040162000c02949392919062001292565b602060405180830381600087803b15801562000c1d57600080fd5b505af192505050801562000c5157506040513d601f19601f8201168201806040525081019062000c4e919062001093565b60015b62000cda573d806000811462000c84576040519150601f19603f3d011682016040523d82523d6000602084013e62000c89565b606091505b5060008151141562000cd2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000cc990620012e6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000d30565b600190505b949350505050565b600062000d5582600262000dd360201b62001e1a1790919060201c565b9050919050565b505050565b600062000d7b836000018360001b62000df560201b60201c565b905092915050565b600062000db7846000018460001b8473ffffffffffffffffffffffffffffffffffffffff1660001b62000e6f60201b60201c565b90509392505050565b600080823b905060008111915050919050565b600062000ded836000018360001b62000f8660201b60201c565b905092915050565b600062000e09838362000fa960201b60201c565b62000e6457826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905062000e69565b600090505b92915050565b600080846001016000858152602001908152602001600020549050600081141562000f185784600001604051806040016040528086815260200185815250908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000155602082015181600101555050846000018054905085600101600086815260200190815260200160002081905550600191505062000f7f565b828560000160018362000f2c9190620013bd565b8154811062000f64577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600202016001018190555060009150505b9392505050565b600080836001016000848152602001908152602001600020541415905092915050565b600080836001016000848152602001908152602001600020541415905092915050565b82805462000fda9062001498565b90600052602060002090601f01602090048101928262000ffe57600085556200104a565b82601f106200101957805160ff19168380011785556200104a565b828001600101855582156200104a579182015b82811115620010495782518255916020019190600101906200102c565b5b5090506200105991906200105d565b5090565b5b80821115620010785760008160009055506001016200105e565b5090565b6000815190506200108d816200153d565b92915050565b600060208284031215620010a657600080fd5b6000620010b6848285016200107c565b91505092915050565b620010ca81620013f8565b82525050565b6000620010dd8262001390565b620010e981856200139b565b9350620010fb81856020860162001462565b62001106816200152c565b840191505092915050565b600062001120603283620013ac565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b600062001188601c83620013ac565b91507f4552433136353a20696e76616c696420696e74657266616365206964000000006000830152602082019050919050565b6000620011ca601c83620013ac565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b60006200120c602083620013ac565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b60006200124e602083620013ac565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6200128c8162001458565b82525050565b6000608082019050620012a96000830187620010bf565b620012b86020830186620010bf565b620012c7604083018562001281565b8181036060830152620012db8184620010d0565b905095945050505050565b60006020820190508181036000830152620013018162001111565b9050919050565b60006020820190508181036000830152620013238162001179565b9050919050565b600060208201905081810360008301526200134581620011bb565b9050919050565b600060208201905081810360008301526200136781620011fd565b9050919050565b6000602082019050818103600083015262001389816200123f565b9050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000620013ca8262001458565b9150620013d78362001458565b925082821015620013ed57620013ec620014ce565b5b828203905092915050565b6000620014058262001438565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200148257808201518184015260208101905062001465565b8381111562001492576000848401525b50505050565b60006002820490506001821680620014b157607f821691505b60208210811415620014c857620014c7620014fd565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b62001548816200140c565b81146200155457600080fd5b50565b61444680620015676000396000f3fe6080604052600436106101e35760003560e01c80636352211e11610102578063a22cb46511610095578063d348b40911610064578063d348b409146106c4578063e985e9c5146106ef578063f0c9dc601461072c578063f2fde38b14610757576101e3565b8063a22cb4651461060a578063b88d4fde14610633578063c87b56dd1461065c578063d12e25ab14610699576101e3565b80638462151c116100d15780638462151c1461056d578063853828b6146105aa5780638da5cb5b146105b457806395d89b41146105df576101e3565b80636352211e146104b15780636c0360eb146104ee57806370a0823114610519578063715018a614610556576101e3565b806323b872dd1161017a57806342842e0e1161014957806342842e0e146103e55780634f6ccce71461040e57806350d7c72d1461044b57806355f804b314610488576101e3565b806323b872dd146103515780632808c92c1461037a5780632f745c591461039157806334d84c7b146103ce576101e3565b806310969523116101b657806310969523146102b65780631205d29b146102df57806318160ddd146102fb5780631c8b232d14610326576101e3565b806301ffc9a7146101e857806306fdde0314610225578063081812fc14610250578063095ea7b31461028d575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a91906131aa565b610780565b60405161021c9190613c22565b60405180910390f35b34801561023157600080fd5b5061023a6107e7565b6040516102479190613c3d565b60405180910390f35b34801561025c57600080fd5b506102776004803603810190610272919061323d565b610879565b6040516102849190613b99565b60405180910390f35b34801561029957600080fd5b506102b460048036038101906102af919061316e565b6108fe565b005b3480156102c257600080fd5b506102dd60048036038101906102d891906131fc565b610a16565b005b6102f960048036038101906102f4919061323d565b610aac565b005b34801561030757600080fd5b50610310610c3a565b60405161031d9190613f1f565b60405180910390f35b34801561033257600080fd5b5061033b610c4b565b6040516103489190613c22565b60405180910390f35b34801561035d57600080fd5b5061037860048036038101906103739190613068565b610c5e565b005b34801561038657600080fd5b5061038f610cbe565b005b34801561039d57600080fd5b506103b860048036038101906103b3919061316e565b610d57565b6040516103c59190613f1f565b60405180910390f35b3480156103da57600080fd5b506103e3610db2565b005b3480156103f157600080fd5b5061040c60048036038101906104079190613068565b610e4b565b005b34801561041a57600080fd5b506104356004803603810190610430919061323d565b610e6b565b6040516104429190613f1f565b60405180910390f35b34801561045757600080fd5b50610472600480360381019061046d919061323d565b610e8e565b60405161047f9190613f1f565b60405180910390f35b34801561049457600080fd5b506104af60048036038101906104aa91906131fc565b610f94565b005b3480156104bd57600080fd5b506104d860048036038101906104d3919061323d565b61101c565b6040516104e59190613b99565b60405180910390f35b3480156104fa57600080fd5b50610503611053565b6040516105109190613c3d565b60405180910390f35b34801561052557600080fd5b50610540600480360381019061053b9190613003565b6110e5565b60405161054d9190613f1f565b60405180910390f35b34801561056257600080fd5b5061056b6111a4565b005b34801561057957600080fd5b50610594600480360381019061058f9190613003565b6112e1565b6040516105a19190613c00565b60405180910390f35b6105b261145d565b005b3480156105c057600080fd5b506105c9611519565b6040516105d69190613b99565b60405180910390f35b3480156105eb57600080fd5b506105f4611543565b6040516106019190613c3d565b60405180910390f35b34801561061657600080fd5b50610631600480360381019061062c9190613132565b6115d5565b005b34801561063f57600080fd5b5061065a600480360381019061065591906130b7565b611756565b005b34801561066857600080fd5b50610683600480360381019061067e919061323d565b6117b8565b6040516106909190613c3d565b60405180910390f35b3480156106a557600080fd5b506106ae61192b565b6040516106bb9190613f1f565b60405180910390f35b3480156106d057600080fd5b506106d9611931565b6040516106e69190613f1f565b60405180910390f35b3480156106fb57600080fd5b506107166004803603810190610711919061302c565b611aea565b6040516107239190613c22565b60405180910390f35b34801561073857600080fd5b50610741611b7e565b60405161074e9190613c3d565b60405180910390f35b34801561076357600080fd5b5061077e60048036038101906107799190613003565b611c0c565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b6060600680546107f690614212565b80601f016020809104026020016040519081016040528092919081815260200182805461082290614212565b801561086f5780601f106108445761010080835404028352916020019161086f565b820191906000526020600020905b81548152906001019060200180831161085257829003601f168201915b5050505050905090565b600061088482611e34565b6108c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ba90613dff565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109098261101c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561097a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097190613e7f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610999611e51565b73ffffffffffffffffffffffffffffffffffffffff1614806109c857506109c7816109c2611e51565b611aea565b5b610a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fe90613d5f565b60405180910390fd5b610a118383611e59565b505050565b610a1e611e51565b73ffffffffffffffffffffffffffffffffffffffff16610a3c611519565b73ffffffffffffffffffffffffffffffffffffffff1614610a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8990613e1f565b60405180910390fd5b80600b9080519060200190610aa8929190612e27565b5050565b6112f1610ab7610c3a565b10610af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aee90613e9f565b60405180910390fd5b600081118015610b08575060148111155b610b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3e90613d3f565b60405180910390fd5b6112f1610b6482610b56610c3a565b611f1290919063ffffffff16565b1115610ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9c90613eff565b60405180910390fd5b610bbf81610bb1611931565b611f2890919063ffffffff16565b341015610c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf890613d9f565b60405180910390fd5b60005b81811015610c36576000610c16610c3a565b9050610c223382611f3e565b508080610c2e90614244565b915050610c04565b5050565b6000610c466002611f5c565b905090565b600a60149054906101000a900460ff1681565b610c6f610c69611e51565b82611f71565b610cae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca590613ebf565b60405180910390fd5b610cb983838361204f565b505050565b610cc6611e51565b73ffffffffffffffffffffffffffffffffffffffff16610ce4611519565b73ffffffffffffffffffffffffffffffffffffffff1614610d3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3190613e1f565b60405180910390fd5b6000600a60146101000a81548160ff021916908315150217905550565b6000610daa82600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061226690919063ffffffff16565b905092915050565b610dba611e51565b73ffffffffffffffffffffffffffffffffffffffff16610dd8611519565b73ffffffffffffffffffffffffffffffffffffffff1614610e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2590613e1f565b60405180910390fd5b6001600a60146101000a81548160ff021916908315150217905550565b610e6683838360405180602001604052806000815250611756565b505050565b600080610e8283600261228090919063ffffffff16565b50905080915050919050565b60006112f18210610ed4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecb90613e9f565b60405180910390fd5b6101f48211610eed5767011c37937e0800009050610f8f565b6106408211610f06576701f161421c8e00009050610f8f565b610a588211610f1f576703782dace9d900009050610f8f565b610e408211610f3857670494654067e100009050610f8f565b6110348211610f515767058d15e1762800009050610f8f565b6112288211610f6a576706f05b59d3b200009050610f8f565b6112ef8211610f8357670853a0d2313c00009050610f8f565b670de0b6b3a764000090505b919050565b610f9c611e51565b73ffffffffffffffffffffffffffffffffffffffff16610fba611519565b73ffffffffffffffffffffffffffffffffffffffff1614611010576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100790613e1f565b60405180910390fd5b611019816122ac565b50565b600061104c826040518060600160405280602981526020016143e86029913960026122c69092919063ffffffff16565b9050919050565b60606009805461106290614212565b80601f016020809104026020016040519081016040528092919081815260200182805461108e90614212565b80156110db5780601f106110b0576101008083540402835291602001916110db565b820191906000526020600020905b8154815290600101906020018083116110be57829003601f168201915b5050505050905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114d90613d7f565b60405180910390fd5b61119d600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206122e5565b9050919050565b6111ac611e51565b73ffffffffffffffffffffffffffffffffffffffff166111ca611519565b73ffffffffffffffffffffffffffffffffffffffff1614611220576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121790613e1f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b606060006112ee836110e5565b9050600081141561137157600067ffffffffffffffff81111561133a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156113685781602001602082028036833780820191505090505b50915050611458565b60008167ffffffffffffffff8111156113b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156113e15781602001602082028036833780820191505090505b50905060005b82811015611451576113f98582610d57565b828281518110611432577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061144990614244565b9150506113e7565b8193505050505b919050565b611465611e51565b73ffffffffffffffffffffffffffffffffffffffff16611483611519565b73ffffffffffffffffffffffffffffffffffffffff16146114d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d090613e1f565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061151757600080fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606007805461155290614212565b80601f016020809104026020016040519081016040528092919081815260200182805461157e90614212565b80156115cb5780601f106115a0576101008083540402835291602001916115cb565b820191906000526020600020905b8154815290600101906020018083116115ae57829003601f168201915b5050505050905090565b6115dd611e51565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561164b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164290613cff565b60405180910390fd5b8060056000611658611e51565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611705611e51565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161174a9190613c22565b60405180910390a35050565b611767611761611e51565b83611f71565b6117a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179d90613ebf565b60405180910390fd5b6117b2848484846122fa565b50505050565b60606117c382611e34565b611802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f990613e5f565b60405180910390fd5b600060086000848152602001908152602001600020805461182290614212565b80601f016020809104026020016040519081016040528092919081815260200182805461184e90614212565b801561189b5780601f106118705761010080835404028352916020019161189b565b820191906000526020600020905b81548152906001019060200180831161187e57829003601f168201915b5050505050905060006118ac611053565b90506000815114156118c2578192505050611926565b6000825111156118f75780826040516020016118df929190613b75565b60405160208183030381529060405292505050611926565b8061190185612356565b604051602001611912929190613b75565b604051602081830303815290604052925050505b919050565b6112f181565b600060011515600a60149054906101000a900460ff16151514611989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198090613edf565b60405180910390fd5b6112f1611994610c3a565b106119d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cb90613e9f565b60405180910390fd5b60006119de610c3a565b90506112f18110611a24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1b90613e9f565b60405180910390fd5b6101f48111611a3e5767011c37937e080000915050611ae7565b6106408111611a58576701f161421c8e0000915050611ae7565b610a588111611a72576703782dace9d90000915050611ae7565b610e408111611a8c57670494654067e10000915050611ae7565b6110348111611aa65767058d15e176280000915050611ae7565b6112288111611ac0576706f05b59d3b20000915050611ae7565b6112ef8111611ada57670853a0d2313c0000915050611ae7565b670de0b6b3a76400009150505b90565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600b8054611b8b90614212565b80601f0160208091040260200160405190810160405280929190818152602001828054611bb790614212565b8015611c045780601f10611bd957610100808354040283529160200191611c04565b820191906000526020600020905b815481529060010190602001808311611be757829003601f168201915b505050505081565b611c14611e51565b73ffffffffffffffffffffffffffffffffffffffff16611c32611519565b73ffffffffffffffffffffffffffffffffffffffff1614611c88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7f90613e1f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cef90613c9f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611dca836000018360001b612503565b905092915050565b6000611dfe846000018460001b8473ffffffffffffffffffffffffffffffffffffffff1660001b612573565b90509392505050565b600080823b905060008111915050919050565b6000611e2c836000018360001b612685565b905092915050565b6000611e4a826002611e1a90919063ffffffff16565b9050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611ecc8361101c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008183611f209190614047565b905092915050565b60008183611f3691906140ce565b905092915050565b611f588282604051806020016040528060008152506126a8565b5050565b6000611f6a82600001612703565b9050919050565b6000611f7c82611e34565b611fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb290613d1f565b60405180910390fd5b6000611fc68361101c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061203557508373ffffffffffffffffffffffffffffffffffffffff1661201d84610879565b73ffffffffffffffffffffffffffffffffffffffff16145b8061204657506120458185611aea565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661206f8261101c565b73ffffffffffffffffffffffffffffffffffffffff16146120c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bc90613e3f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212c90613cdf565b60405180910390fd5b612140838383612714565b61214b600082611e59565b61219c81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061271990919063ffffffff16565b506121ee81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611db890919063ffffffff16565b5061220581836002611dd29092919063ffffffff16565b50808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006122758360000183612733565b60001c905092915050565b60008060008061229386600001866127cd565b915091508160001c8160001c9350935050509250929050565b80600990805190602001906122c2929190612e27565b5050565b60006122d9846000018460001b8461287d565b60001c90509392505050565b60006122f382600001612944565b9050919050565b61230584848461204f565b61231184848484612955565b612350576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234790613c7f565b60405180910390fd5b50505050565b6060600082141561239e576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506124fe565b600082905060005b600082146123d05780806123b990614244565b915050600a826123c9919061409d565b91506123a6565b60008167ffffffffffffffff811115612412577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156124445781602001600182028036833780820191505090505b5090505b600085146124f75760018261245d9190614128565b9150600a8561246c919061428d565b60306124789190614047565b60f81b8183815181106124b4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124f0919061409d565b9450612448565b8093505050505b919050565b600061250f8383612aec565b61256857826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905061256d565b600090505b92915050565b600080846001016000858152602001908152602001600020549050600081141561261a5784600001604051806040016040528086815260200185815250908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000155602082015181600101555050846000018054905085600101600086815260200190815260200160002081905550600191505061267e565b828560000160018361262c9190614128565b81548110612663577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600202016001018190555060009150505b9392505050565b600080836001016000848152602001908152602001600020541415905092915050565b6126b28383612b0f565b6126bf6000848484612955565b6126fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f590613c7f565b60405180910390fd5b505050565b600081600001805490509050919050565b505050565b600061272b836000018360001b612c9d565b905092915050565b60008183600001805490501161277e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277590613c5f565b60405180910390fd5b8260000182815481106127ba577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905092915050565b60008082846000018054905011612819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281090613dbf565b60405180910390fd5b6000846000018481548110612857577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906002020190508060000154816001015492509250509250929050565b600080846001016000858152602001908152602001600020549050600081141583906128df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d69190613c3d565b60405180910390fd5b50846000016001826128f19190614128565b81548110612928577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060020201600101549150509392505050565b600081600001805490509050919050565b60006129768473ffffffffffffffffffffffffffffffffffffffff16611e07565b15612adf578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261299f611e51565b8786866040518563ffffffff1660e01b81526004016129c19493929190613bb4565b602060405180830381600087803b1580156129db57600080fd5b505af1925050508015612a0c57506040513d601f19601f82011682018060405250810190612a0991906131d3565b60015b612a8f573d8060008114612a3c576040519150601f19603f3d011682016040523d82523d6000602084013e612a41565b606091505b50600081511415612a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7e90613c7f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612ae4565b600190505b949350505050565b600080836001016000848152602001908152602001600020541415905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7690613ddf565b60405180910390fd5b612b8881611e34565b15612bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbf90613cbf565b60405180910390fd5b612bd460008383612714565b612c2581600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611db890919063ffffffff16565b50612c3c81836002611dd29092919063ffffffff16565b50808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008083600101600084815260200190815260200160002054905060008114612e1b576000600182612ccf9190614128565b9050600060018660000180549050612ce79190614128565b90506000866000018281548110612d27577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080876000018481548110612d71577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550600183612d8c9190614047565b8760010160008381526020019081526020016000208190555086600001805480612ddf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050612e21565b60009150505b92915050565b828054612e3390614212565b90600052602060002090601f016020900481019282612e555760008555612e9c565b82601f10612e6e57805160ff1916838001178555612e9c565b82800160010185558215612e9c579182015b82811115612e9b578251825591602001919060010190612e80565b5b509050612ea99190612ead565b5090565b5b80821115612ec6576000816000905550600101612eae565b5090565b6000612edd612ed884613f6b565b613f3a565b905082815260208101848484011115612ef557600080fd5b612f008482856141d0565b509392505050565b6000612f1b612f1684613f9b565b613f3a565b905082815260208101848484011115612f3357600080fd5b612f3e8482856141d0565b509392505050565b600081359050612f558161438b565b92915050565b600081359050612f6a816143a2565b92915050565b600081359050612f7f816143b9565b92915050565b600081519050612f94816143b9565b92915050565b600082601f830112612fab57600080fd5b8135612fbb848260208601612eca565b91505092915050565b600082601f830112612fd557600080fd5b8135612fe5848260208601612f08565b91505092915050565b600081359050612ffd816143d0565b92915050565b60006020828403121561301557600080fd5b600061302384828501612f46565b91505092915050565b6000806040838503121561303f57600080fd5b600061304d85828601612f46565b925050602061305e85828601612f46565b9150509250929050565b60008060006060848603121561307d57600080fd5b600061308b86828701612f46565b935050602061309c86828701612f46565b92505060406130ad86828701612fee565b9150509250925092565b600080600080608085870312156130cd57600080fd5b60006130db87828801612f46565b94505060206130ec87828801612f46565b93505060406130fd87828801612fee565b925050606085013567ffffffffffffffff81111561311a57600080fd5b61312687828801612f9a565b91505092959194509250565b6000806040838503121561314557600080fd5b600061315385828601612f46565b925050602061316485828601612f5b565b9150509250929050565b6000806040838503121561318157600080fd5b600061318f85828601612f46565b92505060206131a085828601612fee565b9150509250929050565b6000602082840312156131bc57600080fd5b60006131ca84828501612f70565b91505092915050565b6000602082840312156131e557600080fd5b60006131f384828501612f85565b91505092915050565b60006020828403121561320e57600080fd5b600082013567ffffffffffffffff81111561322857600080fd5b61323484828501612fc4565b91505092915050565b60006020828403121561324f57600080fd5b600061325d84828501612fee565b91505092915050565b60006132728383613b57565b60208301905092915050565b6132878161415c565b82525050565b600061329882613fdb565b6132a28185614009565b93506132ad83613fcb565b8060005b838110156132de5781516132c58882613266565b97506132d083613ffc565b9250506001810190506132b1565b5085935050505092915050565b6132f48161416e565b82525050565b600061330582613fe6565b61330f818561401a565b935061331f8185602086016141df565b6133288161437a565b840191505092915050565b600061333e82613ff1565b613348818561402b565b93506133588185602086016141df565b6133618161437a565b840191505092915050565b600061337782613ff1565b613381818561403c565b93506133918185602086016141df565b80840191505092915050565b60006133aa60228361402b565b91507f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008301527f64730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061341060328361402b565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b600061347660268361402b565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006134dc601c8361402b565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b600061351c60248361402b565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061358260198361402b565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006135c2602c8361402b565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613628602f8361402b565b91507f596f752063616e2061646f7074206d696e696d756d20312c206d6178696d756d60008301527f203230206a6162626120666f726d7300000000000000000000000000000000006020830152604082019050919050565b600061368e60388361402b565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b60006136f4602a8361402b565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b600061375a60238361402b565b91507f45746865722076616c75652073656e742069732062656c6f772074686520707260008301527f69636500000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006137c060228361402b565b91507f456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e60008301527f64730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061382660208361402b565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000613866602c8361402b565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006138cc60208361402b565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061390c60298361402b565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613972602f8361402b565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b60006139d860218361402b565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a3e60168361402b565b91507f53616c652068617320616c726561647920656e646564000000000000000000006000830152602082019050919050565b6000613a7e60318361402b565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613ae460138361402b565b91507f53616c65206861736e27742073746172746564000000000000000000000000006000830152602082019050919050565b6000613b2460128361402b565b91507f45786365656473204d41585f4a414242415300000000000000000000000000006000830152602082019050919050565b613b60816141c6565b82525050565b613b6f816141c6565b82525050565b6000613b81828561336c565b9150613b8d828461336c565b91508190509392505050565b6000602082019050613bae600083018461327e565b92915050565b6000608082019050613bc9600083018761327e565b613bd6602083018661327e565b613be36040830185613b66565b8181036060830152613bf581846132fa565b905095945050505050565b60006020820190508181036000830152613c1a818461328d565b905092915050565b6000602082019050613c3760008301846132eb565b92915050565b60006020820190508181036000830152613c578184613333565b905092915050565b60006020820190508181036000830152613c788161339d565b9050919050565b60006020820190508181036000830152613c9881613403565b9050919050565b60006020820190508181036000830152613cb881613469565b9050919050565b60006020820190508181036000830152613cd8816134cf565b9050919050565b60006020820190508181036000830152613cf88161350f565b9050919050565b60006020820190508181036000830152613d1881613575565b9050919050565b60006020820190508181036000830152613d38816135b5565b9050919050565b60006020820190508181036000830152613d588161361b565b9050919050565b60006020820190508181036000830152613d7881613681565b9050919050565b60006020820190508181036000830152613d98816136e7565b9050919050565b60006020820190508181036000830152613db88161374d565b9050919050565b60006020820190508181036000830152613dd8816137b3565b9050919050565b60006020820190508181036000830152613df881613819565b9050919050565b60006020820190508181036000830152613e1881613859565b9050919050565b60006020820190508181036000830152613e38816138bf565b9050919050565b60006020820190508181036000830152613e58816138ff565b9050919050565b60006020820190508181036000830152613e7881613965565b9050919050565b60006020820190508181036000830152613e98816139cb565b9050919050565b60006020820190508181036000830152613eb881613a31565b9050919050565b60006020820190508181036000830152613ed881613a71565b9050919050565b60006020820190508181036000830152613ef881613ad7565b9050919050565b60006020820190508181036000830152613f1881613b17565b9050919050565b6000602082019050613f346000830184613b66565b92915050565b6000604051905081810181811067ffffffffffffffff82111715613f6157613f6061434b565b5b8060405250919050565b600067ffffffffffffffff821115613f8657613f8561434b565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115613fb657613fb561434b565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614052826141c6565b915061405d836141c6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614092576140916142be565b5b828201905092915050565b60006140a8826141c6565b91506140b3836141c6565b9250826140c3576140c26142ed565b5b828204905092915050565b60006140d9826141c6565b91506140e4836141c6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561411d5761411c6142be565b5b828202905092915050565b6000614133826141c6565b915061413e836141c6565b925082821015614151576141506142be565b5b828203905092915050565b6000614167826141a6565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156141fd5780820151818401526020810190506141e2565b8381111561420c576000848401525b50505050565b6000600282049050600182168061422a57607f821691505b6020821081141561423e5761423d61431c565b5b50919050565b600061424f826141c6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614282576142816142be565b5b600182019050919050565b6000614298826141c6565b91506142a3836141c6565b9250826142b3576142b26142ed565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6143948161415c565b811461439f57600080fd5b50565b6143ab8161416e565b81146143b657600080fd5b50565b6143c28161417a565b81146143cd57600080fd5b50565b6143d9816141c6565b81146143e457600080fd5b5056fe4552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656ea2646970667358221220714a668335f40ce94d94b6689d1c54554b24f75d0b5452cafe3905e1cb9b033f64736f6c63430008000033